package customStruct

import (
	"github.com/gin-gonic/gin"
	. "go_tempate/common/store"
	"net/http"
)

/*
  响应结构体

  注意:
    1.初始化都不会提供Status、token 、 isReturn 属性的自定义初始化值
    2.原则上只能返回JSON格式，故 isReturn 应该一直为true，如果有特殊处理时，则手动将其设置为false，然后进行需求的返回
*/
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type ResponseBody struct {
	Status   int         `json:"status"`  // 浏览器接口返回状态值
	Code     int         `json:"code"`    // 接口自定义状态值
	Message  string      `json:"message"` // 返回信息
	Data     interface{} `json:"data"`    // 数据内容
	Token    string      `json:"token"`   // 更新token信息(仅在用户token需要 更新/登陆 时赋予，其余时则为空)
	IsReturn bool        // 是否返回响应体(按照生成方法构造时都是为true，则为打开自动返回JSON)
}

/*
响应结构体转化函数 将结构体转化为 gin.H

	作用:
	  根据当时响应结构体的数据信息进行配套返回对应的内容与数据，若是返回的数据中有空则不会进行返回

	返回:
	  返回格式化后的 gin.H 的参数
*/
func (res ResponseBody) TransformGINH() gin.H {
	body := gin.H{}

	body["message"] = res.Message

	body["code"] = res.Code

	if res.Data != nil {
		body["date"] = res.Data
	}
	if res.Token != "" {
		body["token"] = res.Token
	}

	return body
}

/*
批量设置参数

参数:

	code:状态码
	message:状态信息
	date:自定义数据内容
*/
func (res *ResponseBody) BatchSettings(code int, message string, date interface{}) {
	res.Code = code
	res.Message = message
	res.Data = date
}

/*
  默认响应体生成

  返回:
   按照默认格式生成的响应体
*/
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
func DefaultResponseBody() *ResponseBody {
	return &ResponseBody{
		Status:   http.StatusOK,
		Code:     Success,
		Message:  "success",
		Data:     nil,
		IsReturn: true,
	}
}
